`
https://leetcode.cn/problems/stable-subarrays-with-equal-boundary-and-interior-sum/
`

/**
 * @param {number[]} capacity
 * @return {number}
 */
var countStableSubarrays = function (capacity) {
  // 题目要求：n[l] === n[r] === s[r] - s[l + 1]
  // 可推为：n[l] === n[r] && n[l] + s[l + 1] === s[r]
  // s 表示前缀和，下标已考虑索引错位
  // 所以按照上式 l 和 r 的相对位置单次遍历，使用哈希表快速查找结果即可
  // 具体思路：https://www.bilibili.com/video/BV1eqxNzXE8v/?t=10m52s
  const cnt = new Map()
  // 前缀和可以简化为一个变量
  let s = capacity[0]
  let res = 0

  for (let i = 0; i < capacity.length - 1; i++) {
    // 在每轮循环里查当前，存上一个，这样就保证 l 和 r 至少有 3 个元素
    // 这里 i 从 0 开始，所以实际上是存 i + 1，查 i
    // s 被初始化为 capacity，所以实际上表示 s[i + 1]

    // 查 r -> (n[i + 1], s[i + 1])
    const key = `${capacity[i + 1]},${s}`
    res += cnt.get(key) || 0

    // 存 l -> (n[i], n[i] + s[i + 1])
    const newKey = `${capacity[i]},${capacity[i] + s}`
    cnt.set(newKey, (cnt.get(newKey) || 0) + 1)

    s += capacity[i + 1]
  }

  return res
};